#!/bin/bash

# 检查是否为root用户
if [ "$(id -u)" != "0" ]; then
    echo "错误: 必须以root用户运行此脚本"
    exit 1
fi

# 自我复制到临时目录并执行（避免删除自身导致的问题）
SCRIPT_PATH=$(readlink -f "$0")
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
SCRIPT_NAME=$(basename "$SCRIPT_PATH")
TEMP_SCRIPT="/tmp/${SCRIPT_NAME}"

# 如果脚本不在临时目录中，则复制并执行临时副本
if [ "$SCRIPT_DIR" != "/tmp" ]; then
    echo "将卸载脚本复制到临时目录并从那里执行..."
    cp "$SCRIPT_PATH" "$TEMP_SCRIPT"
    chmod +x "$TEMP_SCRIPT"
    exec "$TEMP_SCRIPT" "$@"
    # 此处之后的代码不会执行，因为exec会替换当前进程
fi

# 以下代码只有在临时副本中执行时才会运行

# 解析命令行参数
usage() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -p, --path PATH    指定安装路径前缀 (比如: ./uninstall.sh -p /usr/local/bin)"
    echo "  -h, --help         显示此帮助信息"
    exit 1
}

# 默认安装路径
CUSTOM_INSTALL_PATH=""

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    key="$1"
    case $key in
        -p|--path)
            CUSTOM_INSTALL_PATH="$2"
            shift 2
            ;;
        -h|--help)
            usage
            ;;
        *)
            echo "未知选项: $1"
            usage
            ;;
    esac
done

# 导出安装路径环境变量，供config.sh使用
export CUSTOM_INSTALL_PATH

# 检查是否提供了安装路径
if [ -z "$CUSTOM_INSTALL_PATH" ]; then
    echo "错误: 必须指定安装路径"
    usage
fi

# 定义颜色
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 打印带颜色的信息
info() {
    echo -e "${GREEN}[信息]${NC} $1"
}

warn() {
    echo -e "${YELLOW}[警告]${NC} $1"
}

error() {
    echo -e "${RED}[错误]${NC} $1"
    exit 1
}

# 检查是否以root权限运行
check_root() {
    if [ "$EUID" -ne 0 ]; then
        error "请使用root权限运行此脚本"
    fi
}

# 加载配置
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
CURRENT_DIR="$( pwd )"

# 尝试从不同位置加载config.sh
if [ -f "${SCRIPT_DIR}/service/config.sh" ]; then
    source "${SCRIPT_DIR}/service/config.sh"
elif [ -f "${CURRENT_DIR}/service/config.sh" ]; then
    source "${CURRENT_DIR}/service/config.sh"
elif [ -f "${SCRIPT_DIR}/../micro/config.sh" ]; then
    source "${SCRIPT_DIR}/../micro/config.sh"
else
    echo "错误: 找不到config.sh文件"
    exit 1
fi

# 显示卸载信息
info "卸载路径: ${INSTALL_FULL_PATH}"

# 检查权限
check_root

# 提示用户卸载影响
echo -e "${YELLOW}警告：${NC}"
echo "1. 卸载过程将会停止所有 ${SOFTWARE_NAME} 服务"
echo "2. 将删除以下内容："
echo "   - 安装目录：${INSTALL_FULL_PATH}"
echo "   - 服务脚本：/etc/init.d/fdsmastergo"
echo "   - 开机启动配置"
echo "3. 以下内容不会被删除："
echo "   - 备份目录：${INSTALL_PATH}/fdsmastergo_backup"
echo "   - 日志文件：${INSTALL_FULL_PATH}/logs"
echo -e "${YELLOW}是否继续？[y/N]${NC}"
read -r response
if [[ ! "$response" =~ ^[yY]$ ]]; then
    echo "卸载已取消"
    exit 0
fi

# 第一步：停止所有服务
info "停止所有服务..."
if [ -f "/etc/init.d/fdsmastergo" ]; then
    /etc/init.d/fdsmastergo stop
else
    warn "未找到服务脚本(/etc/init.d/fdsmastergo)，尝试直接终止进程..."
    # 从services.json获取服务列表并停止
    if [ -f "${INSTALL_FULL_PATH}/services.json" ]; then
        SERVICES=$(jq -r '.start_order[]' "${INSTALL_FULL_PATH}/services.json" 2>/dev/null)
        for service in $SERVICES; do
            pkill -x "$service" >/dev/null 2>&1 || true
            sleep 1
        done
    fi
fi

# 第二步：移除开机启动配置
info "移除开机启动配置..."
if [ -f "/etc/init.d/fdsmastergo" ]; then
    if command -v update-rc.d >/dev/null 2>&1; then
        update-rc.d -f fdsmastergo remove
    elif command -v chkconfig >/dev/null 2>&1; then
        chkconfig --del fdsmastergo
    else
        # Buildroot通常使用简单的符号链接方式
        for i in 0 1 2 3 4 5 6; do
            rm -f /etc/rc${i}.d/*fdsmastergo 2>/dev/null || true
        done
        info "已移除符号链接方式的开机启动"
    fi
    rm -f /etc/init.d/fdsmastergo
    info "服务脚本已移除"
fi

# 第三步：备份并删除安装目录
if [ -d "${INSTALL_FULL_PATH}" ]; then
    # 创建备份目录
    DATETIME=$(date +%Y%m%d_%H%M%S)
    BACKUP_ROOT="${INSTALL_PATH}/fdsmastergo_backup"
    mkdir -p "${BACKUP_ROOT}"
    
    # 完整备份安装目录
    info "备份整个安装目录，请稍后 （可能需要几分钟）..."
    BACKUP_FILE="${BACKUP_ROOT}/${SOFTWARE_NAME}_${DATETIME}.tar.gz"
    tar -czf "${BACKUP_FILE}" -C "$(dirname "${INSTALL_FULL_PATH}")" "$(basename "${INSTALL_FULL_PATH}")" || warn "完整备份失败，继续执行卸载"
    info "完整备份已保存到: ${BACKUP_FILE}"

    # 删除安装目录
    info "删除安装目录..."
    rm -rf "${INSTALL_FULL_PATH}"
fi

# 完成提示
echo
echo -e "${GREEN}卸载完成！${NC}"
echo -e "${YELLOW}注意事项：${NC}"
echo "1. 服务已停止并移除"
echo "2. 安装目录已删除"
echo "3. 开机启动配置已移除"
echo
echo -e "${YELLOW}以下内容未删除：${NC}"
echo "1. 备份目录：${BACKUP_ROOT}"
echo "   - 完整备份：${BACKUP_FILE}"
echo "   如果确认不再需要，可以手动删除："
echo "   rm -rf ${BACKUP_ROOT}"
echo
echo -e "${GREEN}感谢您的使用！${NC}"

# 自清理：删除临时脚本
if [ "$SCRIPT_DIR" = "/tmp" ]; then
    # 使用后台进程删除自身，避免"text file busy"错误
    (sleep 1; rm -f "$SCRIPT_PATH") &
fi

exit 0 